跳到主要内容

枚举类序列化与反序列化

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

import java.util.Objects;

public enum Status {
SUCCESS(1, "success"),
FAILURE(0, "failure");

/**
* {@link JsonValue} 用于指定序列化输出值。可以作用于字段,也可以作用于 {@link #code()}方法
*/
@JsonValue
final int code;
final String message;

Status(int code, String message) {
this.code = code;
this.message = message;
}

public int code() {
return code;
}

/**
* {@link JsonCreator} 用于指定反序列解析方法,必须是静态方法。
* <p>
* 入参任意,不过通常为序列化输出时的字段类型{@link #code}。
*/
@JsonCreator
public static Status resolve(Integer code) {
if (Objects.nonNull(code)) {
for (Status e : values()) {
if (Objects.equals(code, e.code)) {
return e;
}
}
}
return null;
}
}